// 这里书写 xhl 项目的打包内容

// 0. 导入 gulp 第三方
const gulp = require('gulp')
// 0-2. 导入 gulp-cssmin
const cssmin = require('gulp-cssmin')
// 0-3. 导入 gulp-autoprefixer
const autoprefixer = require('gulp-autoprefixer')
// 0-4. 导入 gulp-uglify
const uglify = require('gulp-uglify')
// 0-5. 导入 gulp-babel
const babel = require('gulp-babel')


// 0-7. 导入 gulp-htmlmin
const htmlmin = require('gulp-htmlmin')



const cssHandler = () => {
 
  return gulp
    .src('./src/css/*.css') // 找到文件
    .pipe(autoprefixer()) // 自动添加前缀
    .pipe(cssmin()) // 打包
    .pipe(gulp.dest('./dist/css/')) // 放到指定目录内
}


// 2-1. 创建一个 打包 js 的任务
const jsHandler = () => {
  // 2-2. 找到指定的 js 文件
  return gulp
    .src('./src/js/*.js') // 找到指定的 js 文件
    .pipe(babel({ presets: ['@babel/preset-env'] })) // 进行 es6 转换 es5
    .pipe(uglify()) // 对 js 代码进行压缩
    .pipe(gulp.dest('./dist/js/')) // 放到指定目录内
}


// 4-1. 创建一个打包 html 文件的任务
const htmlHandler = () => {
  // 4-2. 找到指定的文件
  return gulp
    .src('./src/views/*.html')
    .pipe(htmlmin({
      // 去掉所有的空格空白内容
      collapseWhitespace: true,
      // 去掉布尔类型属性
      collapseBooleanAttributes: true,
      // 移出属性值位置的双引号
      removeAttributeQuotes: true,
      // 移出注释内容
      removeComments: true,
      // 移出空属性
      removeEmptyAttributes: true,
      // 移出 script 标签上的默认 type 属性
      removeScriptTypeAttributes: true,
      // 移出 style 标签和 link 标签的 默认 type 属性
      removeStyleLinkTypeAttributes: true,
      // 压缩内嵌式 js 代码
      // 注意: 不能包含 es6 语法
      minifyJS: true,
      // 压缩内嵌式 css 样式
      minifyCSS: true
    })) // 进行压缩
    .pipe(gulp.dest('./dist/views/')) // 放到指定目录
}


// 5-1. 创建一个打包 image 的任务
const imgHandler = () => {
  // 5-2. 找到指定内容
  return gulp
    .src('./src/images/*.**')
    .pipe(gulp.dest('./dist/images/'))
}
// data 直接转移
const dataHandler = () => {
    return gulp
      .src('./src/data/*.**')
      .pipe(gulp.dest('./dist/data/'))
  }

  // end, 把准备好的任务导出
module.exports = {
    cssHandler: cssHandler,
    jsHandler: jsHandler,
    htmlHandler: htmlHandler,
    imgHandler: imgHandler,
    dataHandler: dataHandler,
}
  